package com.springboot.springboot2.Controller;


import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName:
 * @author: CKC
 * @DateTime: 2021/1/28 14:52
 */
@RestController
public class ParameterControllerTest {
    /**
     * @PathVariable（路径变量)
     * @RequestHeader（获取请求头）
     * @RequestParam（获取请求参数）
     * @CookieValue（获取cookie值）
     * @RequestAttribute（获取request域属性）
     * @RequestBody（获取请求体）
     * @MatrixVariable（矩阵变量）
     **/
    //因为浏览器访问没有cookie 自己搞了一个 先访问 /user  get方式   在访问此请求
    //http://127.0.0.1:8080/car/12/owner/ckc?age=31&inters=aaaa&inters=bbb
    @GetMapping(value = "/car/{id}/owner/{username}")
    public Map<String, Object> getCar(@PathVariable(value = "id") Integer id,
                                      @PathVariable(value = "username") String name,
                                      @PathVariable Map<String, String> pv,/**获取所有路径变量封装到Map集合中*/
    
                                      @RequestHeader(value = "User-Agent") String userAgent,
                                      @RequestHeader Map<String, String> header,/**获取所有请求头信息，封装到map集合中*/
    
                                      @RequestParam(value = "age") Integer age,
                                      @RequestParam(value = "inters") List<String> inters,
                                      @RequestParam Map<String, String> params,/**获取所有请求参数，封装到Map集合中*/
    
                                      @CookieValue(value = "_ga") String _ga) {
        
        Map<String, Object> map = new HashMap<>();
        map.put("id", id);
        map.put("name", name);
        map.put("pv", pv);
        map.put("userAgent", userAgent);
        map.put("header", header);
        
        map.put("age", age);
        map.put("inters", inters);
        map.put("params", params);
        System.out.println("CookieValue:" + _ga);
        map.put("Cookies", "_ga:" + _ga);
        
        System.out.println(Arrays.asList(map));
        
        return map;
    }
    
    @PostMapping(value = "/save")
    public Map postMethod(@RequestBody String content) {
        Map<String, Object> map = new HashMap<>();
        map.put("content", content);
        return map;
    }
    
    /**********************矩阵变量********************************/
    
    /**
     * 1、语法  /cars/sell;low=34;brand=byd,audi,yd
     * 2、SpringBoot 默认是禁用了矩阵变量的功能
     * 手动开启:原理。对于路径的处理。UrLPathHeLper进行解析。
     * removeSemicolonContent（移除分号内容）支持矩阵变量的
     * 3、矩阵变量必须有url路径变量才能被解析
     */
    @GetMapping("/cars/{path}")
    public Map carsSell(@PathVariable String path,
                        @MatrixVariable Integer low,
                        @MatrixVariable List<String> brand) {
        
        Map<String, Object> map = new HashMap<>();
    
        map.put("path", path);
        map.put("low", low);
        map.put("brand", brand);
        return map;
    }
    
    
    //    /boss/1;age=20/2;age=10
    @GetMapping("/boss/{bossId}/{empId}")
    public Map boss(@MatrixVariable(value = "age", pathVar = "bossId") Integer bossAge,
                    @MatrixVariable(value = "age", pathVar = "empId") Integer empAge) {
        Map<String, Object> map = new HashMap<>();
        map.put("bossAge", bossAge);
        map.put("empAge", empAge);
        return map;
    }
    
}
